#include <stdio.h>
#include <linux/fb.h>
#include <stdlib.h>
#include <linux/input.h>//事件结构体头文件
#include "slide.h"
#include <fcntl.h>
#include <unistd.h>
#include"slide.h"
#include"taiji.h"

// 全局变量定义
int end_x = 0, end_y = 0;
FILE *abs_screen = NULL; // 初始化为NULL

//打开触摸屏文件
void open_file()
{
    // 如果文件已经打开，则不再重复打开
    if (abs_screen == NULL) {
        int fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
        if (fd == -1) {
            perror("open abs failed\n");
            exit(0);
        }
        abs_screen = fdopen(fd, "r");
        if (abs_screen == NULL) {
            perror("fdopen failed\n");
            close(fd);
            exit(0);
        }
    }
}
 

//关闭触摸屏文件
void close_file()
{
    if (abs_screen != NULL) {
        fclose(abs_screen);
        abs_screen = NULL;
    }
}
 

//计算点击位置
int direction()
{
    static int start_x = -1, start_y = -1; // 静态变量保持状态
    
    //每次读取都要打开触摸屏文件
    open_file();
    //获取触控屏幕信息
    struct input_event ev;

    // 循环读取事件，直到没有更多事件或找到关键事件
    while (fread(&ev, sizeof(ev), 1, abs_screen) == 1) {
        //记录当前位置，start记录滑动开始位置
        if(ev.type == EV_ABS && ev.code == ABS_X)
        {
            end_x = ev.value * 0.78;
            if(start_x == -1)  // 刚开始触摸时记录起始X坐标
                start_x = end_x;
        }
        if(ev.type == EV_ABS && ev.code == ABS_Y)
        {
            end_y = ev.value * 0.78;
            if(start_y == -1)  // 刚开始触摸时记录起始Y坐标
                start_y = end_y;
        }
        
        //判断手指是否离开屏幕
        if(ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0)
        {
            // 确保我们已经记录了有效的起始位置
            if (start_x != -1 && start_y != -1) {
                //消抖，当起始位置和终点位置相差5个像素以下时，判定为点击
                if(abs(end_x - start_x) < 5 && abs(end_y - start_y) < 5){
                    // 重置状态
                    start_x = -1;
                    start_y = -1;
                    return 0;  // 成功检测到点击
                }
            }
            // 重置状态
            start_x = -1;
            start_y = -1;
        }
    }
    
    return -1; // 未检测到有效点击或没有事件
}
